package com.hyts.bmsp.tool;

import org.apache.commons.lang.StringUtils;
import org.apache.shiro.crypto.hash.Md5Hash;
/**
 * @ClassName: EncryptUtil
 * @Description: 加密算法操作：采用加密算法进行加密操作方法
 * @author: 李博/Alex
 * @date: 2017-1-21 下午01:42:55
 */
public final class EncryptUtil {
	
	
	private static final String SALT_KEY_TOKEN = "BMSP";
	
	/**
	 * Base64算法
	   1、从现在加密算法的复杂性来看Base64这种都不好意思说自己是加密，
	   	     不过对于完全不懂计算机的人来说也够用了。采用Base64编码具有不可读性，
	   	     即所编码的数据不会被人用肉眼所直接看到。
		  Base64编码一般用于url的处理，或者说任何你不想让普通人一眼就知道
		    是啥的东西都可以用Base64编码处理后再发布在网络上。
	 */
	
	 /**
	 * @Title: encodeBase64
	 * @Description: 加密算法操作:双向操作加密解密操作
	 * @param sourceStr
	 * @param encode
	 * @return
	 * @return: String
	 */
	public static String encodeBase64(String sourceStr,String encode){
		
		 if(StringUtils.isNotEmpty(sourceStr) || StringUtils.isNotEmpty(encode)){
		 }
		 return null;
	 }
	/*
	 * 散列算法一般用于生成数据的摘要信息，是一种不可逆的算法，一般适合存储密码之类的数据，
	 * 常见的散列算法如MD5、SHA等。一般进行散列时最好提供一个salt（盐），比如加密密码“admin”，
	 * 产生的散列值是“21232f297a57a5a743894a0e4a801fc3”，
	 * 可以到一些md5解密网站很容易的通过散列值得到密码“admin”，
	 * 即如果直接对密码进行散列相对来说破解更容易，此时我们可以加一些只有系统知道的干扰数据，
	 * 如用户名和ID（即盐）；这样散列的对象是“密码+用户名+ID”，这样生成的散列值相对来说更难破解。
	 */
	
	//高强度加密算法,不可逆
	public static String md5(String password, String salt){
		return new Md5Hash(password,salt,2).toString();
	}
	
	/**
	 * @Title: md5
	 * @Description: 加密算法操作
	 * @param password
	 * @return
	 * @return: String
	 */
	public static String md5(String password){
		return new Md5Hash(password,SALT_KEY_TOKEN,2).toString();
	}
	
}
